home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 12 / CU Amiga Magazine's Super CD-ROM 12 (1997)(EMAP Images)(GB)[!][issue 1997-07].iso / CUCD / Games / DestructivePoker / sources / sources.lha / radiogroup.h < prev    next >
C/C++ Source or Header  |  1997-02-13  |  3KB  |  140 lines

  1. /*
  2.         radiogroup.h
  3.  
  4.         V2.00 - 281196  Kimmo Teräväinen (improvement of selectgroup)
  5.         -----   ------  ----------------
  6.         V0.01   281196  Ripped Selectgroup objects from ffeditor
  7.         V0.10   291196  Perfectly working autoradiogoup
  8.  
  9. NOTE:   Didn't know how to create system like radiogroup.. or ClassAct or
  10.         MUI etc... So made this.
  11. */
  12. #ifndef DC1_RADIOGROUP
  13. #define DC1_RADIOGROUP
  14.  
  15. #include <inline++/graphics.h>
  16.  
  17. #include "poker.h"
  18. #include "rect.h"
  19.  
  20. const int PNL_PLANE        = 0;
  21. const int PNL_RAISED       = 1;
  22. const int PNL_LOWERED      = 2;
  23. const int PNL_FRAMERAISED  = 3;
  24. const int PNL_FRAMELOWERED = 4;
  25.  
  26. extern UBYTE pens[];
  27.  
  28. class cPanel : public cMsgRectangle {
  29. protected:
  30.   int border;
  31. public:
  32.   cPanel(int a=0,int b=0,int c=0,int d=0,int r=PNL_PLANE) :
  33.     cMsgRectangle(a,b,c,d) , border(r) {}
  34.   cPanel(const cPanel &panel) :
  35.     cMsgRectangle(panel) , border(panel.border) {}
  36.  
  37.   void SetBorder(RastPort *rp,int r=PNL_PLANE) {
  38.     border=r;
  39.     Update(rp);
  40.   }
  41.   void Update(RastPort *);
  42.  
  43.   virtual int Active() const { return FALSE; }
  44.   virtual int IDCMP(const IntuiMessage *) { return IDCMP_NOT_DONE; }
  45. };
  46.  
  47. class cRadioGroup;
  48.  
  49. class cRadioGadget : public cPanel {
  50.   cRadioGadget *next;
  51.   const UBYTE  *text;
  52.   int           textsize;
  53.   ULONG         select;
  54.   friend class cRadioGroup;
  55. public:
  56.   cRadioGadget(const UBYTE *txt,ULONG code,int a=0,int b=0,int c=0,int d=0,cRadioGadget *nxt=NULL):
  57.     cPanel(a,b,c,d,PNL_RAISED), text(txt), next(nxt), select(code), textsize(0)
  58.   {
  59.     while(text[textsize]) textsize++; // texlen=strlen(text);
  60.   }
  61.   cRadioGadget(const cRadioGadget &gad,cRadioGadget *nxt=NULL):
  62.     cPanel(gad), text(gad.text), next(nxt), select(gad.select),
  63.     textsize(gad.textsize)
  64.   {
  65.   }
  66.  
  67.   int Selected() const { return border==PNL_LOWERED; }
  68.   ULONG  Select() const { return select; }
  69.   ULONG  Select(RastPort *rp) {
  70.     border=PNL_LOWERED;
  71.     Update(rp);
  72.     return Select();
  73.   }
  74.   void UnSelect(RastPort *rp) {
  75.     border=PNL_RAISED;
  76.     Update(rp);
  77.   }
  78.  
  79.   void Update(RastPort *rp) {
  80.     cPanel::Update(rp);
  81.     SetDrMd(rp,JAM1); SetAPen(rp,pens[1]);
  82.     ::Move(rp,Left()+Width()+2,Top()+(Width()-rp->TxHeight)/2+rp->TxBaseline);
  83.     Text(rp,(UBYTE*)text,textsize);
  84.   }
  85. };
  86.  
  87.  
  88. class cRadioGroup : public cPanel {
  89.   cRadioGadget *active,
  90.                *gadgets;
  91. protected:
  92.   Window *wnd;
  93.  
  94.   void Insert(cRadioGadget *gad) {
  95.     if(active) active->UnSelect(wnd->RPort);
  96.     gad->next=gadgets;
  97.     active=gadgets=gad;
  98.     active->Select(wnd->RPort);
  99.   }
  100.   void Delete() {
  101.     cRadioGadget *gad=gadgets;
  102.     if(gad) {
  103.       if(gad==active) active=NULL;
  104.       gadgets=gad->next;
  105.       delete gad;
  106.     }
  107.   }
  108. public:
  109.   cRadioGroup(Window *Wnd,int a=0,int b=0,int c=0,int d=0) :
  110.     cPanel(a,b,c,d,PNL_FRAMELOWERED),
  111.     active(NULL), gadgets(NULL), wnd(Wnd) { Update(); }
  112.  
  113.   ~cRadioGroup() { DeleteAll(); }
  114.  
  115.   int Add(const cRadioGadget &gad) {
  116.     cRadioGadget *NewGad=new cRadioGadget(gad);
  117.     if(!NewGad) return FALSE;
  118.     Insert(NewGad);
  119.     return TRUE;
  120.   }
  121.   int Add(const UBYTE *txt,ULONG code,int x=0,int y=0,int w=12,int h=12) {
  122.     cRadioGadget gad(txt,code,x+Left()+2,y+Top()+2,w,h);
  123.     return Add(gad);
  124.   }
  125.  
  126.   void  Select(int n);
  127.   ULONG Select() const {
  128.     if(active) return active->Select();
  129.     return 0;
  130.   }
  131.  
  132.   void DeleteAll();
  133.  
  134.   virtual int IDCMP(const IntuiMessage *);
  135.  
  136.   void Update();
  137. };
  138.  
  139. #endif
  140.